import datetime
import time


def get_current_time(format_str: str = "%Y-%m-%d %H:%M:%S") -> str:
    """
    获取当前时间的字符串表示
    :param format_str: 时间格式字符串，默认为 "%Y-%m-%d %H:%M:%S"
    :return: 格式化后的时间字符串
    """
    return datetime.datetime.now().strftime(format_str)

def get_current_time_sub(format_str: str = "%Y-%m-%d") -> str:
    """
    获取当前时间的字符串表示
    :param format_str: 时间格式字符串，默认为 "%Y-%m-%d %H:%M:%S"
    :return: 格式化后的时间字符串
    """
    return datetime.datetime.now().strftime(format_str)


def get_utc_time(format_str: str = "%Y-%m-%dT%H:%M:%SZ") -> str:
    """
    获取当前 UTC 时间的字符串表示
    :param format_str: 时间格式字符串，默认为 ISO 8601 格式 "%Y-%m-%dT%H:%M:%SZ"
    :return: 格式化后的 UTC 时间字符串
    """
    return datetime.datetime.utcnow().strftime(format_str)


def get_timestamp() -> str:
    """
    获取当前时间戳（毫秒级）的字符串表示
    :return: 时间戳字符串
    """
    return str(int(time.time() * 1000))


def get_readable_date() -> str:
    """
    获取易读的日期格式字符串（例如：2023年05月15日）
    :return: 格式化后的日期字符串
    """
    return datetime.datetime.now().strftime("%Y年%m月%d日")


def get_iso_format() -> str:
    """
    获取 ISO 8601 格式的时间字符串（带时区信息）
    :return: ISO 8601 格式的时间字符串
    """
    return datetime.datetime.now().astimezone().isoformat()


def get_three_days_ago(format_str: str = "%Y-%m-%d %H:%M:%S") -> str:
    """
    获取3天前的时间字符串
    :param format_str: 时间格式字符串，默认为 "%Y-%m-%d %H:%M:%S"
    :return: 格式化后的时间字符串
    """
    three_days_ago = datetime.datetime.now() - datetime.timedelta(days=30)
    return three_days_ago.strftime(format_str)


def get_yesterday(format_str: str = "%Y-%m-%d %H:%M:%S") -> str:
    """
    获取昨天的时间字符串
    :param format_str: 时间格式字符串，默认为 "%Y-%m-%d %H:%M:%S"
    :return: 格式化后的时间字符串
    """
    yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
    return yesterday.strftime(format_str)

def get_yesterday_sub(format_str: str = "%Y-%m-%d") -> str:
    """
    获取昨天的时间字符串
    :param format_str: 时间格式字符串，默认为 "%Y-%m-%d %H:%M:%S"
    :return: 格式化后的时间字符串
    """
    yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
    return yesterday.strftime(format_str)


if __name__ == "__main__":
    # 示例用法
    print("标准时间格式:", get_current_time())
    print("ISO 8601 格式:", get_utc_time())
    print("时间戳:", get_timestamp())
    print("易读日期:", get_readable_date())
    print("带时区的 ISO 格式:", get_iso_format())
    print("3天前标准时间:", get_three_days_ago())

    # 自定义格式示例
    print("自定义格式 (YYYYMMDD):", get_current_time("%Y%m%d"))
    print("自定义格式 (HH:MM:SS):", get_current_time("%H:%M:%S"))
    print("3天前日期 (MM/DD/YYYY):", get_three_days_ago("%m/%d/%Y"))